package com.geek.jvm;

import java.util.concurrent.TimeUnit;

/**
 * 逃逸分析
 */
public class DoEscapeAnalysis {

	public static void main(String[] args) throws InterruptedException {
		long start = System.currentTimeMillis();
		for (int i = 0; i < 500000; i++) {
			alloc();
		}
		long end = System.currentTimeMillis();
		System.out.println("创建对象使用时间："+(end-start));

		TimeUnit.SECONDS.sleep(Integer.MAX_VALUE);
	}

	/**
	 * 开启逃逸分析的方式：-XX:+-DoEscapeAnalysis
	 * 从jdk 1.7开始已经默认开始逃逸分析
	 * 使用jps命令查看当前Java程序的进程pid
	 * 使用jmap -histo pid查看进程创建的对象数量
	 */
	public static Student alloc(){
		//Jit在编译时会对代码进行逃逸分析
		//并不是所有对象都放在heap堆区，有一部分会放在线程栈空间
		Student student = new Student();
		return  student;
	}

}

class Student{
	private long id;
	private int age;
	private String name;
}
